﻿// C. Fadi and LCM.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

/*
https://codeforces.com/problemset/problem/1285/C

今天，奥萨玛给了法迪一个整数 X，法迪想知道 max(a,b) 的最小可能值是多少，使得 LCM(a,b) 等于 X。

例如，LCM(6,8)=24，LCM(4,12)=12，LCM(2,3)=6。

当然，法迪马上就知道了答案。你能像法迪一样找出任何这样的对子吗？

输入
第一行也是唯一一行包含一个整数 X（1≤X≤1012）。

输出
打印两个正整数 a 和 b，使得 max(a,b) 的值为最小值，且 LCM(a,b) 如果有多个这样的可能整数对，可以打印任意一个。

Examples
InputCopy
2
OutputCopy
1 2
InputCopy
6
OutputCopy
2 3
InputCopy
4
OutputCopy
1 4
InputCopy
1
OutputCopy
1 1

*/
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>

using namespace std;

vector<long long> primes;

long long  curra = 999999999999999999,currb = 999999999999999999;
long long a = 1;
long long b = 1;


void getprime(long long x) {
	for (long long i = 2; i <= x / i; i++) {
		if (x % i == 0) {
			long long curr = 1;
			while (x % i == 0) { x /= i; curr *= i; }
			primes.push_back(curr);
		}
	}
	if (x != 1) primes.push_back(x);
}

void dfs(int idx) {
	if (idx == primes.size()) {
		if (max(curra, currb) > max(a, b)) {
			curra = a;
			currb = b;
		}
		return;
	}


	a = a * primes[idx];
	dfs(idx+1);
	a=a/ primes[idx];

	b =b* primes[idx];
	dfs(idx+1);
	b = b / primes[idx];

	return;
}

int main()
{
	long long x; cin >> x;
	if (x == 1) {
		cout << 1 << " " << 1 << endl;
		return 0;
	}
	getprime(x);
	dfs(0);
	/*for (int i = 0; i < 1 << primes.size(); i++) {
		a = 1;
		b = 1;
		for (int j = 0; j < primes.size(); j++) {
			if (i & 1 << j) {
				a *= primes[j];
			}
			else {
				b *= primes[j];
			}
		}
		if (max(a, b) < max(curra, currb)) {
			curra = a;
			currb = b;
		}
	}*/



	cout << curra << " " << currb << endl;

	return 0;
}

 